<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        //匹配过的，不会重复匹配
        //贪婪模式，能匹配多，就不会匹配少
        // 量词
        // n+ {1,正无穷} 
        var reg = /\w+/g,
            str = 'abcdefg';
        console.log(str.match(reg));

        // n* {0,正无穷} 
        var reg = /\w*/g,
            str = 'abcdefg';
        console.log(str.match(reg));
        // 字符串从左到右，依次匹配多，在匹配少，如果一旦匹配上就不回头回头匹配
        // 贪婪匹配原则：能匹配上多个，绝不匹配少个

        // n？ {0,1} 
        var reg = /\w?/g,
            str = 'abcdefg';
        console.log(str.match(reg));
        // n{x,y} {x,y} 
        // {1,2}中间不能有空格
        var reg = /\w{1,2}/g,
            str = 'abcdefg';
        console.log(str.match(reg));
        // ^n 匹配任何以n开头的字符串
        var reg = /^ab/g,
            str = 'abcdefg';
        console.log(str.match(reg));
        //n$ 匹配任何以n结尾的字符串
        var reg = /fg$/g,
            str = 'abcdefg';
        console.log(str.match(reg));
        // 检查字符串是否以ab开头和以ab结尾
        var reg = /^ab[\d\D]*ab$/g,
            reg1 = /^ab|ab$/g,
            str = 'abcdefgab';
        console.log(str.match(reg));
        console.log(str.match(reg1));
        // 检查字符串是否以ab开头和以ab结尾,并且开头结尾之间是数字
        var reg = /^ab[\d]+ab$/g,
            str = 'ab143123123ab';
        console.log(str.match(reg));

        // 匹配138开头的11位手机号码
        var reg = /^138[\d]{8}/g,
            str = '13811111111';
        console.log(str.match(reg));

        // ?=n 匹配任何其后紧接着指定字符串n的字符串
        // ?!n
        var reg = /a(?=b)/g,
            str = 'abcdabcd';
        console.log(str.match(reg));

        // 子表达式 反向引用
        // \1反向引用第一个表达式
        var reg = /(a)\1\1\1/g,
            // 具有记忆功能，记忆第一次匹配到的数据，如果后面反向引用不匹配，就清除记忆
            reg1 = /(\w)\1\1\1/g,
            str = 'aaaabbbcaaaacc';
        console.log(str.match(reg));
        console.log(str.match(reg1));
        // 匹配到返回true
        console.log(reg1.test(str));

        console.log(reg1.exec(str));
    </script>
</body>

</html>